home *** CD-ROM | disk | FTP | other *** search
- program TDM61;
- {$APPTYPE CONSOLE}
- uses
- SysUtils, MMSystem;
-
- function CaptionMaker1(Str: WideString): WideString;
- { stack: 256 (arg) + 256 (local) + 256 (result) bytes }
- var
- i: Integer;
- Tmp: WideString;
- begin
- Tmp := Str; // initial copy
- for i:=1 to Length(Str) do
- if (i = 1) or (Ord(Str[i-1]) = 32) then
- Tmp[i] := WideChar(UpCase(Chr(Ord(Str[i]))))
- else
- Tmp[i] := Str[i];
- Result := Tmp;
- end;
-
- function CaptionMaker2(Str: WideString): WideString;
- { stack: 256 (arg) + 256 (result) bytes }
- var
- i: Integer;
- begin
- for i:=1 to Length(Str) do
- if (i = 1) or (Ord(Str[i-1]) = 32) then
- Str[i] := WideChar(UpCase(Chr(Ord(Str[i]))));
- Result := Str
- end;
-
- function CaptionMaker3(const Str: WideString): WideString;
- { stack: 256 (result) bytes }
- var
- i: Integer;
- begin
- Result := Str; // initial copy
- for i:=1 to Length(Str) do
- if (i = 1) or (Ord(Str[i-1]) = 32) then
- Result[i] := WideChar(UpCase(Chr(Ord(Str[i]))))
- end;
-
- procedure CaptionMaker4(var Str: WideString);
- var
- i: Integer;
- begin
- for i:=1 to Length(Str) do
- if (i = 1) or (Ord(Str[i-1]) = 32) then
- Str[i] := WideChar(UpCase(Chr(Ord(Str[i]))))
- end;
-
- function CaptionMaker5(var Str: WideString): PWideString;
- var
- i: Integer;
- begin
- for i:=1 to Length(Str) do
- if (i = 1) or (Ord(Str[i-1]) = 32) then
- Str[i] := WideChar(UpCase(Chr(Ord(Str[i]))));
- Result := @Str
- end;
-
- var
- Str: WideString;
- Str2: WideString;
- EndTime: Cardinal;
- Reps: Integer;
- begin
- Str := 'this is a short WideString to test';
- Reps := 0;
- EndTime := TimeGetTime + 100;
- repeat
- Inc(Reps);
- Str2 := CaptionMaker1(Str);
- until TimeGetTime > EndTime;
- writeln('1: ',Reps);
- Reps := 0;
- EndTime := TimeGetTime + 100;
- repeat
- Inc(Reps);
- Str2 := CaptionMaker2(Str);
- until TimeGetTime > EndTime;
- writeln('2: ',Reps);
- Reps := 0;
- EndTime := TimeGetTime + 100;
- repeat
- Inc(Reps);
- Str2 := CaptionMaker3(Str);
- until TimeGetTime > EndTime;
- writeln('3: ',Reps);
- Reps := 0;
- EndTime := TimeGetTime + 100;
- repeat
- Inc(Reps);
- CaptionMaker4(Str);
- until TimeGetTime > EndTime;
- writeln('4: ',Reps);
- Reps := 0;
- EndTime := TimeGetTime + 100;
- repeat
- Inc(Reps);
- Str2 := CaptionMaker5(Str)^;
- until TimeGetTime > EndTime;
- writeln('5: ',Reps);
- readln
- end.